RESULTADOS DE COMPARACION RNASEQ ELENA MARTIN

library(readr)
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ purrr     1.0.2
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.5.1     ✔ tibble    3.2.1
✔ lubridate 1.9.3     ✔ tidyr     1.3.1
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(DESeq2)
Cargando paquete requerido: S4Vectors
Cargando paquete requerido: stats4
Cargando paquete requerido: BiocGenerics

Adjuntando el paquete: 'BiocGenerics'

The following objects are masked from 'package:lubridate':

    intersect, setdiff, union

The following objects are masked from 'package:dplyr':

    combine, intersect, setdiff, union

The following objects are masked from 'package:stats':

    IQR, mad, sd, var, xtabs

The following objects are masked from 'package:base':

    anyDuplicated, aperm, append, as.data.frame, basename, cbind,
    colnames, dirname, do.call, duplicated, eval, evalq, Filter, Find,
    get, grep, grepl, intersect, is.unsorted, lapply, Map, mapply,
    match, mget, order, paste, pmax, pmax.int, pmin, pmin.int,
    Position, rank, rbind, Reduce, rownames, sapply, setdiff, table,
    tapply, union, unique, unsplit, which.max, which.min


Adjuntando el paquete: 'S4Vectors'

The following objects are masked from 'package:lubridate':

    second, second<-

The following objects are masked from 'package:dplyr':

    first, rename

The following object is masked from 'package:tidyr':

    expand

The following object is masked from 'package:utils':

    findMatches

The following objects are masked from 'package:base':

    expand.grid, I, unname

Cargando paquete requerido: IRanges

Adjuntando el paquete: 'IRanges'

The following object is masked from 'package:lubridate':

    %within%

The following objects are masked from 'package:dplyr':

    collapse, desc, slice

The following object is masked from 'package:purrr':

    reduce

Cargando paquete requerido: GenomicRanges
Cargando paquete requerido: GenomeInfoDb
Cargando paquete requerido: SummarizedExperiment
Cargando paquete requerido: MatrixGenerics
Cargando paquete requerido: matrixStats

Adjuntando el paquete: 'matrixStats'

The following object is masked from 'package:dplyr':

    count


Adjuntando el paquete: 'MatrixGenerics'

The following objects are masked from 'package:matrixStats':

    colAlls, colAnyNAs, colAnys, colAvgsPerRowSet, colCollapse,
    colCounts, colCummaxs, colCummins, colCumprods, colCumsums,
    colDiffs, colIQRDiffs, colIQRs, colLogSumExps, colMadDiffs,
    colMads, colMaxs, colMeans2, colMedians, colMins, colOrderStats,
    colProds, colQuantiles, colRanges, colRanks, colSdDiffs, colSds,
    colSums2, colTabulates, colVarDiffs, colVars, colWeightedMads,
    colWeightedMeans, colWeightedMedians, colWeightedSds,
    colWeightedVars, rowAlls, rowAnyNAs, rowAnys, rowAvgsPerColSet,
    rowCollapse, rowCounts, rowCummaxs, rowCummins, rowCumprods,
    rowCumsums, rowDiffs, rowIQRDiffs, rowIQRs, rowLogSumExps,
    rowMadDiffs, rowMads, rowMaxs, rowMeans2, rowMedians, rowMins,
    rowOrderStats, rowProds, rowQuantiles, rowRanges, rowRanks,
    rowSdDiffs, rowSds, rowSums2, rowTabulates, rowVarDiffs, rowVars,
    rowWeightedMads, rowWeightedMeans, rowWeightedMedians,
    rowWeightedSds, rowWeightedVars

Cargando paquete requerido: Biobase
Welcome to Bioconductor

    Vignettes contain introductory material; view with
    'browseVignettes()'. To cite Bioconductor, see
    'citation("Biobase")', and for packages 'citation("pkgname")'.


Adjuntando el paquete: 'Biobase'

The following object is masked from 'package:MatrixGenerics':

    rowMedians

The following objects are masked from 'package:matrixStats':

    anyMissing, rowMedians
library(DT)

El QC secundario puede verse a continuación en:

https://jdiazp00.github.io/RNASEQ_ElenaMartin_Final/QualityControl_ElenaMartin.html

countData <- read.csv("/home/jaime/Escritorio/Resultados_UCA-GT/S-11-2024_RNASeq_ElenaMartin/RNASEQ_ElenaMartin/star_salmon/salmon.merged.gene_counts.tsv", sep = "\t", header = TRUE, row.names = 1) %>% 
  select(-gene_name) %>% 
  select(everything()) %>% 
  round()

#Este paso parece ser necesario porque no me dejaba crear el objeto dds. Saltaba un error que decía que no podía haber valores NA en la countData, pero no los habia tras realizar varias comprobaciones. Rebuscando en internet, parece ser que DESeq2 tiene problemas con integers demasiado grandes. Dividir entre dos soluciona el problema.
#Más información en este enlace: https://chat.stackoverflow.com/rooms/223701/discussion-between-stupidwolf-and-jack-henry

#countData <- countData/2

colData <- read.csv("coldata.csv",row.names = 1, sep = "\t")

countData <- countData[, rownames(colData)]

#Eliminar aquellas que son iguales a 0 en toda su columna
countData <- countData[rowSums(countData) > 0, ]

#Asegurar que los nombres de las columnas en countdata coinciden con los nombres de las filsa de coldata
all(colnames(countData) %in% rownames(colData))
[1] TRUE
#Asegurar que estan en el mismo orden
all(colnames(countData) == rownames(colData))
[1] TRUE
#Construcción del objeto dds
dds <- DESeqDataSetFromMatrix(countData =  countData,
                       colData = colData,
                       design = ~ Condicion)
converting counts to integer mode
Warning in DESeqDataSet(se, design = design, ignoreRank): some variables in
design formula are characters, converting to factors
dds
class: DESeqDataSet 
dim: 23398 16 
metadata(1): version
assays(1): counts
rownames(23398): A1BG A1BG-AS1 ... ZZEF1 ZZZ3
rowData names(0):
colnames(16): C2h_1 C4h_2 ... Q2h_4 C4h_1
colData names(1): Condicion
#Prefiltro
##Recomendación: Eliminar las filas con menos de 10 lecturas en general
keep <- rowSums(counts(dds)) >= 10
dds <- dds[keep,]
#Decirle al sistema que elemento es el de referencia
dds$Condicion <- relevel(dds$Condicion, ref = "C2h")
#Correr el DESeq
dds <- DESeq(dds)
estimating size factors
estimating dispersions
gene-wise dispersion estimates
mean-dispersion relationship
final dispersion estimates
fitting model and testing
res<- results(dds)
ElenaMartin_Normalizado <- counts(dds, normalized = TRUE) %>% 
  round(digits = 0)

ElenaMartin_Normalizado %>%
  datatable(extensions = 'Buttons',
            options = list(dom = 'Blfrtip',
                           buttons = c('copy', 'csv', 'excel', 'pdf', 'print'),
                           lengthMenu = list(c(10,25,50,-1),
                                             c(10,25,50,"All"))))
Warning in instance$preRenderHook(instance): It seems your data is too big for
client-side DataTables. You may consider server-side processing:
https://rstudio.github.io/DT/server.html
write.csv(ElenaMartin_Normalizado, "ElenaMartin_NormalizadoNuevo.csv")

Exploracion de resultados y Comparación de Grupos

##Anotación: La columna “log2FoldChange”, puede ser positiva si ese gen esta upregulado en la primera condición frente a la segunda (Izq vs Dch) o negativo si esta downregulado

Q2h enfrentado a C2h

results_Q2h_C2h <- results(dds, contrast = c("Condicion", "Q2h","C2h"))
results_Q2h_C2h <- as.data.frame(results_Q2h_C2h)

results_Q2h_C2h %>%
  datatable(extensions = 'Buttons',
            options = list(dom = 'Blfrtip',
                           buttons = c('copy', 'csv', 'excel', 'pdf', 'print'),
                           lengthMenu = list(c(10,25,50,-1),
                                             c(10,25,50,"All"))))
Warning in instance$preRenderHook(instance): It seems your data is too big for
client-side DataTables. You may consider server-side processing:
https://rstudio.github.io/DT/server.html

Q4h enfrentado a C4h

results_Q4h_C4h <- results(dds, contrast = c("Condicion", "Q4h", "C4h"))
results_Q4h_C4h <- as.data.frame(results_Q4h_C4h)

results_Q4h_C4h %>%
  datatable(extensions = 'Buttons',
            options = list(dom = 'Blfrtip',
                           buttons = c('copy', 'csv', 'excel', 'pdf', 'print'),
                           lengthMenu = list(c(10,25,50,-1),
                                             c(10,25,50,"All"))))
Warning in instance$preRenderHook(instance): It seems your data is too big for
client-side DataTables. You may consider server-side processing:
https://rstudio.github.io/DT/server.html

C4h enfrentado a C2h

results_C4h_C2h <- results(dds, contrast = c("Condicion", "C4h","C2h"))
results_C4h_C2h <- as.data.frame(results_C4h_C2h)

results_C4h_C2h %>%
  datatable(extensions = 'Buttons',
            options = list(dom = 'Blfrtip',
                           buttons = c('copy', 'csv', 'excel', 'pdf', 'print'),
                           lengthMenu = list(c(10,25,50,-1),
                                             c(10,25,50,"All"))))
Warning in instance$preRenderHook(instance): It seems your data is too big for
client-side DataTables. You may consider server-side processing:
https://rstudio.github.io/DT/server.html

Q4h enfrentado a Q2h

results_Q4h_Q2h <- results(dds, contrast = c("Condicion", "Q4h", "Q2h"))
results_Q4h_Q2h <- as.data.frame(results_Q4h_Q2h)

results_Q4h_Q2h %>%
  datatable(extensions = 'Buttons',
            options = list(dom = 'Blfrtip',
                           buttons = c('copy', 'csv', 'excel', 'pdf', 'print'),
                           lengthMenu = list(c(10,25,50,-1),
                                             c(10,25,50,"All"))))
Warning in instance$preRenderHook(instance): It seems your data is too big for
client-side DataTables. You may consider server-side processing:
https://rstudio.github.io/DT/server.html

#######################################################

Genes Upregulados y Downregulados en las listas anteriores

##Anotación: Adjusted p-value < 0.05

##Anotación: log2FoldChange >= 1 (Upregulación)

##Anotación: log2FoldChange <= -1 (Downregulación)

##PARA Q2h vs C2h

###Upregulados

Q2h_C2h_up_reg <- subset(results_Q2h_C2h, (results_Q2h_C2h$padj < 0.01 & results_Q2h_C2h$log2FoldChange >= 1.5)) 
Q2h_C2h_up_reg <- as.data.frame(Q2h_C2h_up_reg)

Q2h_C2h_up_reg %>%
  datatable(extensions = 'Buttons',
            options = list(dom = 'Blfrtip',
                           buttons = c('copy', 'csv', 'excel', 'pdf', 'print'),
                           lengthMenu = list(c(10,25,50,-1),
                                             c(10,25,50,"All"))))

###Downregulados

Q2h_C2h_down_reg <- subset(results_Q2h_C2h, results_Q2h_C2h$padj < 0.01 & results_Q2h_C2h$log2FoldChange <= -1.5)
Q2h_C2h_down_reg <- as.data.frame(Q2h_C2h_down_reg)

Q2h_C2h_down_reg %>%
  datatable(extensions = 'Buttons',
            options = list(dom = 'Blfrtip',
                           buttons = c('copy', 'csv', 'excel', 'pdf', 'print'),
                           lengthMenu = list(c(10,25,50,-1),
                                             c(10,25,50,"All"))))

##PARA Q4h vs C4h

###Upregulados

Q4h_C4h_up_reg <- subset(results_Q4h_C4h, results_Q4h_C4h$padj < 0.01 & results_Q4h_C4h$log2FoldChange >= 1.5)
Q4h_C4h_up_reg <- as.data.frame(Q4h_C4h_up_reg)

Q4h_C4h_up_reg %>%
  datatable(extensions = 'Buttons',
            options = list(dom = 'Blfrtip',
                           buttons = c('copy', 'csv', 'excel', 'pdf', 'print'),
                           lengthMenu = list(c(10,25,50,-1),
                                             c(10,25,50,"All"))))

###DOwnregulados

Q4h_C4h_down_reg <- subset(results_Q4h_C4h, results_Q4h_C4h$padj < 0.01 & results_Q4h_C4h$log2FoldChange <= -1.5)
Q4h_C4h_down_reg <- as.data.frame(Q4h_C4h_down_reg)

Q4h_C4h_down_reg %>%
  datatable(extensions = 'Buttons',
            options = list(dom = 'Blfrtip',
                           buttons = c('copy', 'csv', 'excel', 'pdf', 'print'),
                           lengthMenu = list(c(10,25,50,-1),
                                             c(10,25,50,"All"))))

##PARA C4h vs C2h

###Upregulados

C4h_C2h_up_reg <- subset(results_C4h_C2h, results_C4h_C2h$padj < 0.01 & results_C4h_C2h$log2FoldChange >= 1.5)
C4h_C2h_up_reg <- as.data.frame(C4h_C2h_up_reg)

C4h_C2h_up_reg %>%
  datatable(extensions = 'Buttons',
            options = list(dom = 'Blfrtip',
                           buttons = c('copy', 'csv', 'excel', 'pdf', 'print'),
                           lengthMenu = list(c(10,25,50,-1),
                                             c(10,25,50,"All"))))

###Downregulados

C4h_C2h_down_reg <- subset(results_C4h_C2h, results_C4h_C2h$padj < 0.01 & results_C4h_C2h$log2FoldChange <= -1.5)
C4h_C2h_down_reg <- as.data.frame(C4h_C2h_down_reg)

C4h_C2h_down_reg %>%
  datatable(extensions = 'Buttons',
            options = list(dom = 'Blfrtip',
                           buttons = c('copy', 'csv', 'excel', 'pdf', 'print'),
                           lengthMenu = list(c(10,25,50,-1),
                                             c(10,25,50,"All"))))

##PARA Q4h vs Q2h

###Upregulados

Q4h_Q2h_up_reg <- subset(results_Q4h_Q2h, results_Q4h_Q2h$padj < 0.01 & results_Q4h_Q2h$log2FoldChange >= 1.5)
Q4h_Q2h_up_reg <- as.data.frame(Q4h_Q2h_up_reg)

Q4h_Q2h_up_reg %>%
  datatable(extensions = 'Buttons',
            options = list(dom = 'Blfrtip',
                           buttons = c('copy', 'csv', 'excel', 'pdf', 'print'),
                           lengthMenu = list(c(10,25,50,-1),
                                             c(10,25,50,"All"))))

###Downregulados

Q4h_Q2h_down_reg <- subset(results_Q4h_Q2h, results_Q4h_Q2h$padj < 0.01 & results_Q4h_Q2h$log2FoldChange <= -1.5)
Q4h_Q2h_down_reg <- as.data.frame(Q4h_Q2h_down_reg)

Q4h_Q2h_down_reg %>%
  datatable(extensions = 'Buttons',
            options = list(dom = 'Blfrtip',
                           buttons = c('copy', 'csv', 'excel', 'pdf', 'print'),
                           lengthMenu = list(c(10,25,50,-1),
                                             c(10,25,50,"All"))))